#ifndef NIGHTLIGHTCONTROLLER_H
#define NIGHTLIGHTCONTROLLER_H

#include <QtCore>
#include <QtDBus>

// class NightLightController : public QObject
// {
//     Q_OBJECT
// public:
//     explicit NightLightController(QObject* parent=nullptr) : QObject(parent) {}

//     // 启用夜灯并应用色温（如 1700K）
//     bool enableAndApply(int kelvin)
//     {
//         if (!setGSettingsBool("org.gnome.settings-daemon.plugins.color", "night-light-enabled", true))
//             return false;
//         if (!setGSettingsInt("org.gnome.settings-daemon.plugins.color", "night-light-temperature", kelvin))
//             return false;
//         return refreshByPowerSaveToggle();
//     }

//     // 关闭夜灯并刷新生效
//     bool disableAndApply()
//     {
//         if (!setGSettingsBool("org.gnome.settings-daemon.plugins.color", "night-light-enabled", false))
//             return false;
//         return refreshByPowerSaveToggle();
//     }

//     // 仅修改色温并刷新（夜灯需已开启）
//     bool setTemperatureAndApply(int kelvin)
//     {
//         if (!setGSettingsInt("org.gnome.settings-daemon.plugins.color", "night-light-temperature", kelvin))
//             return false;
//         return refreshByPowerSaveToggle();
//     }

// private:
//     // 触发“黑屏→点亮”以强制应用（Wayland + Mutter）
//     bool refreshByPowerSaveToggle(int offMs = 0)
//     {
//         // org.gnome.Mutter.DisplayConfig PowerSaveMode<int32> : 3=off, 0=on
//         static const QString dest = "org.gnome.Mutter.DisplayConfig";
//         static const QString path = "/org/gnome/Mutter/DisplayConfig";
//         static const QString iface = "org.freedesktop.DBus.Properties";
//         QDBusInterface props(dest, path, iface, QDBusConnection::sessionBus());
//         if (!props.isValid())
//             return false;

//         auto setMode = [&](qint32 mode)->bool {
//             QVariant v = QVariant::fromValue(QDBusVariant(QVariant::fromValue<qint32>(mode)));
//             QDBusReply<void> r = props.call("Set",
//                                             QStringLiteral("org.gnome.Mutter.DisplayConfig"),
//                                             QStringLiteral("PowerSaveMode"),
//                                             v);
//             return r.isValid();
//         };

//         if (!setMode(3)) return false;
//         QThread::msleep(offMs);
//         if (!setMode(0)) return false;
//         return true;
//     }

//     // 最简 gsettings 写入（用 QProcess 调用系统 gsettings）
//     static bool setGSettingsBool(const QString& schema, const QString& key, bool value)
//     {
//         QStringList args{ "set", schema, key, value ? "true" : "false" };
//         return run("gsettings", args);
//     }

//     static bool setGSettingsInt(const QString& schema, const QString& key, int value)
//     {
//         QStringList args{ "set", schema, key, QString::number(value) };
//         return run("gsettings", args);
//     }

//     static bool run(const QString& program, const QStringList& args, int timeoutMs = 2000)
//     {
//         QProcess p;
//         p.start(program, args);
//         if (!p.waitForStarted(timeoutMs)) return false;
//         if (!p.waitForFinished(timeoutMs)) { p.kill(); return false; }
//         return (p.exitStatus() == QProcess::NormalExit && p.exitCode() == 0);
//     }
// };

class NightLightController : public QObject
{
    Q_OBJECT

public:
    explicit NightLightController(QObject *parent = nullptr);
    ~NightLightController();

public slots:
    // 切换到暗模式（开启夜灯，1700K）
    void toDarkMode();

    // 切换到亮模式（关闭夜灯）
    void toLightMode();

private:
    // 触发屏幕“黑屏 -> 亮屏”刷新
    void turnOffScreen();
    void turnOnScreen();

    // 通用的 gsettings 写入函数
    bool setGSettingsValue(const QString &schema, const QString &key, const QVariant &value);

    // 色温常量
    static constexpr int DARK_MODE_KELVIN = 1700;
};

#endif // NIGHTLIGHTCONTROLLER_H
